mesa_18
authorDebian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Wed, 2 May 2018 17:50:22 +0000 (18:50 +0100)
committerDmitry Shachnev <mitya57@debian.org>
Wed, 2 May 2018 17:50:22 +0000 (18:50 +0100)
Gbp-Pq: Name mesa_18.diff

src/gui/opengl/qopenglprogrambinarycache.cpp
src/gui/opengl/qopenglshaderprogram.cpp

index 06373e11138983c3d85b5722e05b4adc4b7a5cb9..d16173df83c0a2b7148dcf14c299c64ce89c37c2 100644 (file)
@@ -161,10 +161,26 @@ bool QOpenGLProgramBinaryCache::setProgramBinary(uint programId, uint blobFormat
     QOpenGLExtraFunctions *funcs = QOpenGLContext::currentContext()->extraFunctions();
     while (funcs->glGetError() != GL_NO_ERROR) { }
     funcs->glProgramBinary(programId, blobFormat, p, blobSize);
-    int err = funcs->glGetError();
+
+    GLenum err = funcs->glGetError();
+    if (err != GL_NO_ERROR) {
+        qCDebug(DBG_SHADER_CACHE, "Program binary failed to load for program %u, size %d, "
+                                  "format 0x%x, err = 0x%x",
+                programId, blobSize, blobFormat, err);
+        return false;
+    }
+    GLint linkStatus = 0;
+    funcs->glGetProgramiv(programId, GL_LINK_STATUS, &linkStatus);
+    if (linkStatus != GL_TRUE) {
+        qCDebug(DBG_SHADER_CACHE, "Program binary failed to load for program %u, size %d, "
+                                  "format 0x%x, linkStatus = 0x%x, err = 0x%x",
+                programId, blobSize, blobFormat, linkStatus, err);
+        return false;
+    }
+
     qCDebug(DBG_SHADER_CACHE, "Program binary set for program %u, size %d, format 0x%x, err = 0x%x",
             programId, blobSize, blobFormat, err);
-    return err == 0;
+    return true;
 }
 
 #ifdef Q_OS_UNIX
index cc8af16bfe7892a601a8b13f8c1dc910b27b4f7d..3b82baccb3844904940284b37d5dd5b16aef93e7 100644 (file)
@@ -3824,13 +3824,7 @@ bool QOpenGLShaderProgramPrivate::linkBinary()
     bool needsCompile = true;
     if (binCache.load(cacheKey, q->programId())) {
         qCDebug(DBG_SHADER_CACHE, "Program binary received from cache");
-        linkBinaryRecursion = true;
-        bool ok = q->link();
-        linkBinaryRecursion = false;
-        if (ok)
-            needsCompile = false;
-        else
-            qCDebug(DBG_SHADER_CACHE, "Link failed after glProgramBinary");
+        needsCompile = false;
     }
 
     bool needsSave = false;